﻿//P5662 [CSP-J2019] 纪念品

//
//#include <iostream>
//#include <cstring>
//#include <algorithm>
//using namespace std;
//
//const int N = 110;
//const int M = 1e4 + 10;
//
//int a[N][N] = { 0 };
//int f[M] = { 0 };
//
//int t, n, m;
//
//int day_pack(int v[], int w[])
//{
//	memset(f, 0, sizeof(f));
//	
//	for (int i = 1; i <= n; i++)
//	{
//		for (int j = v[i]; j <= m; j++)
//		{
//			f[j] = max(f[j], f[j - v[i]] + (w[i] - v[i]));
//		}
//	}
//
//	return f[m];
//}
//
//int main()
//{
//	cin >> t >> n >> m;
//	for (int i = 1; i <= t; i++)
//	{
//		for (int j = 1; j <= n; j++)
//		{
//			cin >> a[i][j];
//		}
//	}
//
//	for (int i = 1; i < t; i++)
//	{
//		m += day_pack(a[i], a[i + 1]);
//	}
//
//	cout << m << endl;
//
//	return 0;
//}


//多重背包
//多重背包
//#include <iostream>
//using namespace std;
//
//const int N = 110;
//
//int n, m;
//int x[N] = { 0 };
//int w[N] = { 0 };
//int v[N] = { 0 };
//int f[N] = { 0 };
//
//int main()
//{
//	cin >> n >> m;
//	for (int i = 1; i <= n; i++)
//	{
//		cin >> x[i] >> w[i] >> v[i];
//	}
//
//	for (int i = 1; i <= n; i++)
//	{
//		for (int j = m; j >= 0; j--)
//		{
//			for (int k = 0; k <= x[i] && k * w[i] <= j; k++)
//			{
//				f[j] = max(f[j], f[j - k * w[i]] + k * v[i]);
//			}
//		}
//	}
//
//	cout << f[m] << endl;
//
//	return 0;
//}
//
//
//#include <iostream>
//using namespace std;
//
//const int N = 110 * 5;
//
//int n, m;
//int pos;
//int w[N] = { 0 };
//int v[N] = { 0 };
//int f[N] = { 0 };
//
//int main()
//{
//	cin >> n >> m;
//	for (int i = 1; i <= n; i++)
//	{
//		int x, y, z; 
//		cin >> x >> y >> z;
//
//		// 按照⼆进制拆分 
//		int t = 1;
//		while (x >= t)
//		{
//			pos++;
//			w[pos] = t * y;
//			v[pos] = t * z;
//			x -= t;
//			t *= 2;
//		}
//
//
//		if (x) // 处理剩余 
//		{
//			pos++;
//			w[pos] = x * y;
//			v[pos] = x * z;
//		}
//
//
//	}
//
//	// 针对拆分之后的物品，做⼀次 01背包
//	for (int i = 1; i <= pos; i++)
//	{
//		for (int j = m; j >= w[i]; j--)
//		{
//			f[j] = max(f[j], f[j - w[i]] + v[i]);
//		}
//
//	}
//
//	cout << f[m] << endl;
//
//	return 0;
//}


//P1077 [NOIP 2012 普及组] 摆花


#include <iostream>
using namespace std;
const int N = 110, MOD = 1e6 + 7;

int n, m;
int a[N] = { 0 };
int f[N] = { 0 };

int main()
{
	cin >> n >> m;

	for (int i = 1; i <= n; i++) 
	{
		cin >> a[i];
	}

	f[0] = 1;

	for (int i = 1; i <= n; i++)
	{
		for (int j = m; j >= 0; j--)
		{
			for (int k = 1; k <= j && k <= a[i]; k++)
			{
				f[j] = (f[j] + f[j - k]) % MOD;
			}
		}
	}

	cout << f[m] << endl;

	return 0;
}
